package com.ssy.lingxi.order.service.base;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.entity.OrderTradeProcessDO;
import com.ssy.lingxi.order.model.vo.process.request.OrderTradeProcessContractVO;
import com.ssy.lingxi.order.model.vo.process.response.OrderTradeProcessContractDetailVO;

/**
 * 交易规则关联的合同相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-07-24
 */
public interface IBaseOrderTradeProcessContractService {

    /**
     * 新增、修改交易规则配置时，校验合同信息
     * @param hasContract    是否使用合同
     * @param contractVO     合同信息
     * @return 检查结果
     */
    Wrapper<Void> checkContract(Boolean hasContract, OrderTradeProcessContractVO contractVO);

    /**
     * 保存交易规则关联的合同信息，调用方要保存OrderTradeProcessDO
     * @param tradeProcess 交易流程规则
     * @param hasContract 是否使用电子合同
     * @param contractVO  电子合同信息
     */
    void saveContract(OrderTradeProcessDO tradeProcess, Boolean hasContract, OrderTradeProcessContractVO contractVO);

    /**
     * 查询交易流程规则关联的合同信息
     * @param tradeProcess 交易流程规则
     * @return 合同信息
     */
    OrderTradeProcessContractDetailVO getContract(OrderTradeProcessDO tradeProcess);

    /**
     * 更新交易规则关联的合同信息，调用方要保存OrderTradeProcessDO
     * @param tradeProcess 交易流程规则
     * @param hasContract 是否使用电子合同
     * @param contractVO  电子合同信息
     */
    void updateContract(OrderTradeProcessDO tradeProcess, Boolean hasContract, OrderTradeProcessContractVO contractVO);
}
